home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************\
- ** Chunky demo (uses Extension) for Secal **
- ** Requires Kickstart 2 **
- \******************************************************************************/
-
-
- go main;
-
-
- def WIDTH=96; # MULTIPLE OF 16
- def HEIGHT=48;
- def DEPTH=6;
-
-
- include "inc/graphics/modeid.inc";
-
- include "ext/ext.inc"; # INTERFACE FOR EXTENSION
- inclib "ext/ext.lib"; # USE EXTENSION LIB
-
-
- #-------------------------------------------------------------------------------
-
-
- main:
- push d2\a2\a3;
-
- x_Init; # INITIALIZE EXTENSION
- if d0 then
- x_GraphicsStart; # START GRAPHICS SUBSYSTEM
- if d0 then
- x_Scr_Open(EXTRAHALFBRITE_KEY,WIDTH<<1,HEIGHT<<1,DEPTH,0,@scrcolors,0);
- a2:=a0; # OPEN SCREEN (EHB)
-
- if a2 then
- x_Scr_AddBmp(a2); # ADD BUFFER FOR DOUBLE BUFFERING
- if d0 then
- x_SetTaskPri(0,31); # RAISE TASK PRIORITY
-
- d2:=0;
- repeat
- call frame; # RENDER NEXT FRAME
-
- d2:=d2 xor 1;
- x_Scr_GetBmp(a2,d2); a3:=a0; # A3=CURRENTLY INVISIBLE BITMAP
-
- x_C2P_6xy(@chunkybuf,x_bmp(a3).planes,WIDTH,HEIGHT,
- x_bmp(a3).rowwidth,x_bmp(a3).rowdiff);
- # CONVERT CHUNKY BUFFER INTO THE PLANAR BITMAP
-
- x_Scr_ActivateBmp(a2,d2,-1,-1); # SWAP DISPLAY BITMAPS
- until [$dff016] and $400=0; # DIRTY CHECK FOR RIGHT MOUSE BUTTON
-
- x_RevertTaskPri; # REVERT TO PREVIOUS PRIORITY
- ;
- ;
- ;
- x_Done; # CLOSE EXTENSION AND CLEANUP
- ;
-
- d0.l:=0;
-
- pop d2\a2\a3;
- rts; # MAIN
-
-
-
- scrcolors:
- dc.l $000000,$130611,$250c22,$381233,$4a1744,$5d1d55,$6f2366,$81295b;
- dc.l $942f51,$a63546,$b93a3b,$cb4030,$de4626,$f04c1b,$f15a26,$f36830;
- dc.l $f4763a,$f68445,$f7914f,$f99f5a,$faad64,$fcbb6e,$fdc979,$ffd783;
- dc.l $ffdc93,$ffe1a2,$ffe6b2,$ffebc1,$fff0d1,$fff5e0,$fffaf0,$ffffff;
- # SCREEN COLORS, RGB8 FORMAT
-
-
- #-------------------------------------------------------------------------------
-
-
- # THIS FUNCTION CALCULATES ONE FRAME OF THE "FIRE". FIRST THE TWO EXTRA
- # LINES AT THE BOTTOM ARE FILLED WITH RANDOM COLORS. THEN THE NEW COLOR OF
- # EACH PIXEL IS CALCULATED FROM THE COLORS OF 4-5 NEIGHBOURING PIXELS BELOW.
-
-
- frame:
- push d2\d3\d4\d5\a2\a3\a4\a5\a6;
-
- a2:=@chunkybuf+HEIGHT*WIDTH;
- for d2:=WIDTH-1 downto 0 do
- x_Rnd; [a2+]:=d0 and $1f1f+$0202;
- ;
-
- a2:=@chunkybuf; d2.l:=0; a3:=0; a4:=[a2+WIDTH];
- d3.l:=$3f3f3f3f; d4.l:=$01010101; a5:=$80808080; a6:=$02020202; a1:=$40404040;
- d5.l:=(HEIGHT*WIDTH)>>2;
-
- loop:
- move.l a3,d2; move.l a4,a3; move.l [a2+WIDTH+4],a4;
- move.l a3,d1; add.l [a2+WIDTH*2],d1;
- move.l a3,d0; move.b d2,d0; ror.l 8,d0; add.l d0,d1;
- move.l a3,d0; lsl.l 8,d0;
- move.l a4,d7; rol.l 8,d7; move.b d7,d0; add.l d0,d1;
- move.l a3,d0; lsr.l 1,d0; and.l d3,d0; add.l d0,d1;
- lsr.l 2,d1; and.l d3,d1;
-
- add.l a5,d1; sub.l a6,d1;
- move.l a1,d0; and.l d1,d0; lsr.l 5,d0; add.l d0,d1;
- move.l d1,d0; lsr.l 5,d0; and.l d4,d0; sub.l d0,d1;
- and.l d3,d1; move.l d1,[a2+];
-
- subq.l 1,d5;
- bne.b loop;
-
- pop d2\d3\d4\d5\a2\a3\a4\a5\a6;
- rts; # FRAME
-
-
- #-------------------------------------------------------------------------------
-
-
- bss;
-
- align 4;
- chunkybuf: ds.b (HEIGHT+2)*WIDTH;
- # LONG ALIGNED CHUNKY BUFFER IN THE BSS SECTION,
- # ONE BYTE FOR EACH PIXEL
- code;
-
-
- #-------------------------------------------------------------------------------
-
-